Total number of trajectories¶
Count number of trajectories from 1 to N¶
Steps (jumps) = 1,2
Performance: O(N)
*************** ****************
******* ********
[------|------|------|------|----------|------|-------]
0 1 2 3 4 ... N-2 N-1 N
0 0 i -----> K[i-2] + K[i-1]
def traj_num(N):
K = [0, 1] + [0] * (N-1)
for i in range(2, N+1):
K[i] = K[i-2] + K[i-1]
return K[N]
Count all allowed trajectories¶
Steps (jumps) = 1,2,3
Performance: O(N)
********************** **********************
*************** ***************
******* ********
[------|------|------|------|----------|------|-------|------]
0 1 2 3 4 ... N-3 N-2 N-1 N
0 0 i -----> K[i-3]+K[i-2]+K[i-1]
Prohibited cells - in boolean array as False
def count_all_trajectories(N, allowed:list):
K = [0, 1, int(allowed[2])] + [0] * (N-3)
for i in range(3, N):
if allowed[i]:
K[i] = K[i-1] + K[i-2] + K[i-3]
return K[N]
Count minimal price to reach N¶
price[i] - price for cell i
C[i] - min sum price to reach i
steps(jumps): +1 and +2
=> Formula: C[i] = price[i] + min(C[i-1], C[i-2])
C[1] = price[1]
C[2] = price[1] + prcie[2]
def count_min_cost(N, price:list):
C = [[float("-inf")], price[1], price[1] + price[2]] + [0]*(N-2)
for i in range(3, N+1):
C[i] = price[i] + min(C[i-1], C[i-2])
return C[N] # min price to reach N
Test¶
def test_traj(traj_algorithm):
print("Testing: ", traj_algorithm.__doc__)
N = 10
print("testcase #1: ", end="")
Exp = 55
Res = traj_algorithm(N)
print("Ok" if Res == Exp else "Fail")
if __name__ == "__main__":
# Trajectories
test_traj(traj_num)